Skip to content

feat: transparent gzip input (.gz files and stdin) - #223

Merged
vmvarela merged 2 commits into
masterfrom
feature/gzip-input
Aug 6, 2026
Merged

feat: transparent gzip input (.gz files and stdin)#223
vmvarela merged 2 commits into
masterfrom
feature/gzip-input

Conversation

@vmvarela

@vmvarela vmvarela commented Aug 6, 2026

Copy link
Copy Markdown
Owner

Implements transparent gzip decompression for .gz files and gzip-magic stdin (Issue #220) using std.compress.flate.Decompress. Zero new dependencies.

  • Files: .gz extension check → wrap reader in std.compress.flate.Decompress
  • Stdin: peek(2) for gzip magic (0x1f 0x8b), wrap in place
  • Format: single-layer .gz strip before fromExtension
  • Table name from inner basename (data.csv.gz → data)
  • 6 new integration tests, all 200+ existing pass

Closes #220

Add transparent gzip decompression for .gz files and gzip-magic stdin
using std.compress.flate.Decompress (gzip container). No new dependencies.

- Files: .gz extension detection, auto-format from inner extension
  (data.csv.gz → csv, table )
- Stdin: peek(2) magic sniff (0x1f 0x8b), non-consuming
- Streaming decompress into existing buffered reader
- Table name derived from inner name (strip .gz before stem)
- Clear error on corrupt gzip stream (fatal + csv_error)
- Non-gzip path unchanged (no sniffing overhead beyond 2 bytes)

Closes #220
@github-actions github-actions Bot added the type:feature New functionality label Aug 6, 2026
- args.zig: path literally ".gz" produced an empty table name; fall back to
  the full path stem when stripping the extension collapses it.
- main.zig: wrap the flate reader so error.ReadFailed is translated into a
  message naming the specific gzip failure (EndOfStream, WrongGzipChecksum,
  etc.) instead of a generic "failed to parse CSV". The wrapper forwards to
  flate's vtable methods and mirrors its buffer cursor so the shared-buffer
  reader keeps working; the previous blind forward hung on empty fill slices.
- build.zig: corrupt-gzip integration test now uses a real .gz name (the old
  fixture ended .gz_truncated and never hit the gzip path) and asserts the
  new error message.
@vmvarela
vmvarela merged commit e7dcef2 into master Aug 6, 2026
4 checks passed
@vmvarela
vmvarela deleted the feature/gzip-input branch August 6, 2026 11:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:feature New functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature: transparent gzip input (.csv.gz files and stdin)

1 participant